// #include <iostream>
// using namespace std;

// #include <gtest/gtest.h>

// class A
// {
// private:
//     int flag=0;
// public:
//     A(int flag_=0) : flag(flag_){
//         std::cout << "A constructor." << std::endl;
//     }

//     ~A(){
//         std::cout << flag << " A Deconstructor." << std::endl;
//     }

//     A(A&& obj){
//         std::cout << "A move Deconstructor." << std::endl;
//     }

//     A& operator=(A&& obj){
//         std::cout << "A move operator." << std::endl;
//         return *this;
//     }

// };

// class B{
// public:
//     B(){
//         std::cout << "B constructor." << std::endl;
//     }
//     ~B(){
//         std::cout << "B Deconstructor." << std::endl;
//     }
// };

// class C{
// public:
//     C(){
//         std::cout << "C constructor." << std::endl;
//     }

//     ~C(){
//         std::cout << "C Deconstructor." << std::endl;
//     }

// private:
//     A a;
//     B b;
// };

// TEST(constructor, test){
//     std::cout << "Test the constructor and deconstructor." << std::endl;

// // 空类中可以使用：拷贝构造，赋值操作符，移动构造，移动赋值操作符。
//     // A a;
//     // A b = a;
//     // b = a;
//     {
//         A c = std::move(A(1));
//         std::cout << "+++++++++++++++++" << std::endl;
//     }
    
//     // c = A();

//     // B bb;
//     // B cc = bb;
//     // cc = bb;
//     // B dd = B();
//     // dd = B();
// }

// TEST(deconstructor, index){
//     std::cout << "Test the deconstructor sequence." << std::endl;
//     // for (gsl::index i = 0; i < 20; i++)
//     // {
//     //     std::cout << "i = " << i << std::endl;
//     // }

//     float yy = -2.4229;
//     int xx = (int)(yy);
//     std::cout << "################# xx = " << (int)xx << std::endl;

//     char *zz = "hello";
//     // zz[0] = '1';

//     std::cout << "################# zz = " << zz << std::endl;

//     {
//         C c;
//     }
    
// }